import java.util.Scanner;
public class bookmanager {static Scanner sc;
    static String[][] users;
    static String[][] books;
    static String[][] pubs;
    static String loginUser;

    public bookmanager() {
    }

    public static void main(String[] args) {
        init();
        index();
    }

    private static void index() {
        while(true) {
            System.out.println("欢迎来到龙院图书管理系统！");
            System.out.println("1.登录 2.注册");
            int logOrReg = sc.nextInt();
            switch(logOrReg) {
                case 1:
                    login();
                    break;
                case 2:
                    register();
                    break;
                default:
                    System.out.println("系统退出！");
                    System.exit(0);
            }
        }
    }

    private static void register() {
        System.out.println("请输入所属部门：");
        String deptName = sc.next();
        System.out.println("请输入用户名：");
        String userName = sc.next();
        System.out.println("请输入密码：");
        String passWord = sc.next();

        for(int i = 0; i < users.length; ++i) {
            if (users[i][1] == null) {
                users[i][0] = deptName;
                users[i][1] = userName;
                users[i][2] = passWord;
                users[i][3] = "普通用户";
                System.out.println("注册成功！");
                break;
            }
        }

    }

    private static boolean login() {
        boolean logFlag = false;

        while(true) {
            String userName;
            String passWord;
            do {
                do {
                    if (logFlag) {
                        return false;
                    }

                    System.out.println("请输入用户名：");
                    userName = sc.next();
                    System.out.println("请输入密码：");
                    passWord = sc.next();
                } while(stringutil.isEmpty(userName));
            } while(stringutil.isEmpty(passWord));

            for(int i = 0; i < users.length; ++i) {
                if (userName.equals(users[i][1]) && passWord.equals(users[i][2])) {
                    System.out.println("登录成功！");
                    loginUser = userName;
                    homePage();
                }
            }

            System.out.println("输入错误，请重新输入！");
        }
    }

    private static void homePage() {
        System.out.println(loginUser + "， 欢迎您使用龙院书籍管理系统！！！");

        while(true) {
            while(true) {
                System.out.println("请输入数字进行选择：1 图书管理  2 出版社管理  3 退出登录  4 退出系统");
                int key = sc.nextInt();
                switch(key) {
                    case 1:
                        bookManage();
                        break;
                    case 2:
                        pubManage();
                        break;
                    case 3:
                        loginUser = "";
                        System.out.println("已退出登录！");
                        index();
                        break;
                    case 4:
                        System.out.println("系统退出成功！");
                        System.exit(0);
                }
            }
        }
    }

    private static void pubManage() {
        System.out.println("请输入：1.增加 2.删除 3.更新 4.根据出版社名称查询 5.查询所有出版社 6.返回上一级菜单");
        int key = sc.nextInt();
        switch(key) {
            case 1:
                addPub();
                break;
            case 2:
                delPub();
                break;
            case 3:
                updatePub();
                break;
            case 4:
                searchPubByName();
                break;
            case 5:
                searchAllPubCom();
                break;
            case 6:
                homePage();
        }

    }

    static void searchAllPubCom() {
        System.out.println("出版社名称\t地址 \t联系人\t");

        for(int i = 0; i < pubs.length; ++i) {
            if (pubs[i][0] != null) {
                System.out.println(pubs[i][0] + "\t" + pubs[i][1] + "\t" + pubs[i][2] + "\t");
            }
        }

    }

    private static void searchPubByName() {
        System.out.println("请输入出版社名称：");
        String pcName = sc.next();
        int index = getPubIndex(pcName);
        if (index != -1) {
            System.out.println("出版社名称：" + pubs[index][0]);
            System.out.println("出版社地址：" + pubs[index][1]);
            System.out.println("出版社联系人：" + pubs[index][2]);
        } else {
            System.out.println("该出版社不存在！！！");
        }

    }

    private static void updatePub() {
        System.out.println("请输入要更新的出版社名称：");
        String pubName = sc.next();
        int index = getPubIndex(pubName);
        printPubCom(index);
        System.out.println("请输入要更新的地址：");
        String pcAddress = sc.next();
        System.out.println("请输入要更新的联系人姓名：");
        String pcPerson = sc.next();
        boolean b = updatePubCom(index, pcAddress, pcPerson);
        if (b) {
            System.out.println("更新成功");
            printPubCom(index);
        } else {
            System.out.println("更新失败！！！");
        }

    }

    static boolean updatePubCom(int index, String pcAddress, String pcPerson) {
        boolean b = false;
        pubs[index][1] = pcAddress;
        pubs[index][2] = pcPerson;
        b = true;
        return b;
    }

    private static void delPub() {
        System.out.println("请输入要删除的书籍名称：");
        String pubName = sc.next();
        boolean boo = delByPCName(pubName);
        if (boo) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }

    }

    private static void addPub() {
        System.out.println("请输入出版社名称：");
        String pcName = sc.next();
        System.out.println("请输入出版社地址：");
        String pcAddress = sc.next();
        System.out.println("请输入出版社联系人：");
        String pcPerson = sc.next();
        boolean b = insertPC(pcName, pcAddress, pcPerson);
        if (b) {
            System.out.println("出版社添加成功");
        } else {
            System.out.println("出版社添加失败");
        }

    }

    static void printPubCom(int index) {
        System.out.println("出版社名称\t地址                    \t联系人\t");
        System.out.print(pubs[index][0] + "\t");
        System.out.print(pubs[index][1] + "\t");
        System.out.println(pubs[index][2] + "\t");
    }

    static boolean insertPC(String pcName, String pcAddress, String pcPerson) {
        boolean b = false;
        if (getPubIndex(pcName) == -1) {
            int index = getPCIndexOfFirstNull();
            pubs[index][0] = pcName;
            pubs[index][1] = pcAddress;
            pubs[index][2] = pcPerson;
            b = true;
        }

        return b;
    }

    static int getPCIndexOfFirstNull() {
        int index = -1;

        for(int i = 0; i < pubs.length; ++i) {
            if (pubs[i][0] == null) {
                index = i;
                break;
            }
        }

        return index;
    }

    private static void bookManage() {
        while(true) {
            System.out.println("请输入：1.增加 2.删除 3.更新 4.查询 5.返回上一级菜单");
            int key = sc.nextInt();
            switch(key) {
                case 1:
                    addBook();
                    break;
                case 2:
                    delBook();
                    break;
                case 3:
                    updateBook();
                    break;
                case 4:
                    searchBook();
                    break;
                case 5:
                    homePage();
            }
        }
    }

    static void searchBookByISBN(String isbn) {
        System.out.println("ISBN\t书名                       \t价格\t出版社           \t作者\t");

        for(int i = 0; i < books.length; ++i) {
            if (isbn.equals(books[i][0])) {
                System.out.println(books[i][0] + "\t" + books[i][1] + "\t" + books[i][2] + "\t" + books[i][3] + "\t" + books[i][4] + "\t");
                break;
            }
        }

    }

    private static void searchBook() {
        boolean y = true;

        while(true) {
            while(y) {
                System.out.println("请输入查询种类：1.isbn 2.书名（模糊） 3.出版社 4. 作者 5. 价格范围 6.查询所有 7.返回上一级 ");
                int h = sc.nextInt();
                String author;
                if (h == 1) {
                    System.out.println("请输入ISBN号：");
                    author = sc.next();
                    searchBookByISBN(author);
                } else if (h == 2) {
                    System.out.println("请输入书名：");
                    author = sc.next();
                    searchByBookName(author);
                } else if (h == 3) {
                    System.out.print("请输入出版社前的数字进行选择：");
                    printPC();
                    int d = sc.nextInt();
                    if (d >= 1 && d <= getNumOfPC()) {
                        String pcName = pubs[d - 1][0];
                        searchBookByPC(pcName);
                    } else {
                        System.out.println("请选择正确的数字！！！");
                    }
                } else if (h == 4) {
                    System.out.println("请输入作者姓名：");
                    author = sc.next();
                    searchBookByAuthor(author);
                } else if (h == 5) {
                    System.out.println("请输入最低价格");
                    double min = sc.nextDouble();
                    System.out.println("请输入最高价格");
                    double max = sc.nextDouble();
                    searchBookByPrice(min, max);
                } else if (h == 6) {
                    searchAllBook();
                } else if (h == 7) {
                    y = false;
                } else {
                    System.out.println("请输入正确的数字选项！！！");
                }
            }

            return;
        }
    }

    static void searchAllBook() {
        System.out.println("ISBN\t书名                       \t价格\t出版社           \t作者\t");

        for(int i = 0; i < books.length; ++i) {
            if (books[i][0] != null) {
                System.out.println(books[i][0] + "\t" + books[i][1] + "\t" + books[i][2] + "\t" + books[i][3] + "\t" + books[i][4] + "\t");
            }
        }

    }

    static void searchBookByPrice(double min, double max) {
        System.out.println("ISBN\t书名                       \t价格\t出版社           \t作者\t");

        for(int i = 0; i < books.length; ++i) {
            if (books[i][0] != null) {
                double price = Double.parseDouble(books[i][2]);
                if (price >= min && price <= max) {
                    System.out.println(books[i][0] + "\t" + books[i][1] + "\t" + books[i][2] + "\t" + books[i][3] + "\t" + books[i][4] + "\t");
                }
            }
        }

    }

    static void searchBookByAuthor(String author) {
        System.out.println("\tISBN\t书名                       \t价格\t出版社           \t作者\t");

        for(int i = 0; i < books.length; ++i) {
            if (author.equals(books[i][4])) {
                System.out.println("\t" + books[i][0] + "\t" + books[i][1] + "\t" + books[i][2] + "\t" + books[i][3] + "\t" + books[i][4] + "\t");
            }
        }

    }

    static void searchBookByPC(String pcName) {
        System.out.println("\tISBN\t书名                       \t价格\t出版社           \t作者\t");

        for(int i = 0; i < books.length; ++i) {
            if (pcName.equals(books[i][3])) {
                System.out.println("\t" + books[i][0] + "\t" + books[i][1] + "\t" + books[i][2] + "\t" + books[i][3] + "\t" + books[i][4] + "\t");
            }
        }

    }

    static int getNumOfPC() {
        int count = 0;

        for(int i = 0; i < pubs.length; ++i) {
            if (pubs[i][0] != null) {
                ++count;
            }
        }

        return count;
    }

    static void printPC() {
        for(int i = 0; i < pubs.length; ++i) {
            if (pubs[i][0] != null) {
                System.out.print(i + 1 + ". " + pubs[i][0] + " ");
            }
        }

        System.out.println();
    }

    static void searchByBookName(String bookName) {
        System.out.println("\tISBN\t书名                       \t价格\t出版社           \t作者\t");

        for(int i = 0; i < books.length; ++i) {
            if (books[i][0] != null && books[i][1].indexOf(bookName) != -1) {
                System.out.println("\t" + books[i][0] + "\t" + books[i][1] + "\t" + books[i][2] + "\t" + books[i][3] + "\t" + books[i][4] + "\t");
            }
        }

    }

    private static void updateBook() {
        System.out.println("请输入ISBN号：");
        String isbn = sc.next();
        int index = getIndexByISBN(isbn);
        if (index != -1) {
            System.out.println("请输入新的书名：");
            String bookName = sc.next();
            System.out.println("请输入新的价格：");
            String bookPrice = sc.next();
            System.out.println("请输入新的出版社：");
            String pubCom = sc.next();
            System.out.println("请输入新的作者：");
            String author = sc.next();
            boolean b = updateBook(index, bookName, bookPrice, pubCom, author);
            if (b) {
                System.out.println("更新成功！！！");
            } else {
                System.out.println("更新失败");
            }
        } else {
            System.out.println("该ISBN号不存在！！！");
        }

    }

    static boolean updateBook(int index, String bookName, String bookPrice, String pubCom, String author) {
        boolean b = false;
        books[index][1] = bookName;
        books[index][2] = bookPrice;
        books[index][3] = pubCom;
        books[index][4] = author;
        b = true;
        return b;
    }

    private static void delBook() {
        System.out.println("请输入要删除的出版社名称：");
        String pcName = sc.next();
        boolean b = delByPCName(pcName);
        if (b) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }

    }

    static int getPubIndex(String pcName) {
        int index = -1;

        for(int i = 0; i < pubs.length; ++i) {
            if (pcName.equals(pubs[i][0])) {
                index = i;
                break;
            }
        }

        return index;
    }

    static boolean isExistInBook(String pcName) {
        boolean bool = false;

        for(int i = 0; i < books.length; ++i) {
            if (pcName.equals(books[i][3])) {
                bool = true;
                break;
            }
        }

        return bool;
    }

    static boolean delByPCName(String pcName) {
        boolean b = false;
        int index = getPubIndex(pcName);
        if (index != -1) {
            if (!isExistInBook(pcName)) {
                for(int i = index; i < pubs.length - 1; ++i) {
                    pubs[i] = pubs[i + 1];
                }

                b = true;
            } else {
                System.out.println("该出版社有相关图书信息存在！不可以删除！如果要删除请先删除所有相关图书信息！！！");
            }
        }

        return b;
    }

    private static void addBook() {
        System.out.println("请输入图书ISBN:");
        String isbn = sc.next();
        System.out.println("请输入书名:");
        String bookName = sc.next();
        System.out.println("请输入价格:");
        String bookPrice = sc.next();
        System.out.println("请输入出版社:");
        String pubCom = sc.next();
        System.out.println("请输入作者:");
        String author = sc.next();
        boolean b = insertBook(isbn, bookName, bookPrice, pubCom, author);
        if (b) {
            System.out.println("添加成功！！！");
        } else {
            System.out.println("添加失败！！！该书已经存在！！！");
        }

    }

    static boolean insertBook(String isbn, String bookName, String bookPrice, String pubCom, String author) {
        boolean b = false;
        int i = getIndexByISBN(isbn);
        if (i == -1) {
            int index = getBookIndexOfFirstNull();
            books[index][0] = isbn;
            books[index][1] = bookName;
            books[index][2] = bookPrice;
            books[index][3] = pubCom;
            books[index][4] = author;
            b = true;
        }

        return b;
    }

    static int getIndexByISBN(String isbn) {
        int index = -1;

        for(int i = 0; i < books.length; ++i) {
            if (isbn.equals(books[i][0])) {
                index = i;
                break;
            }
        }

        return index;
    }

    static int getBookIndexOfFirstNull() {
        int index = -1;

        for(int i = 0; i < books.length; ++i) {
            if (books[i][0] == null) {
                index = i;
                break;
            }
        }

        return index;
    }

    private static void init() {
        users[0][0] = "行政部";
        users[0][1] = "admin";
        users[0][2] = "123";
        users[0][3] = "管理员";
        users[1][0] = "市场部";
        users[1][1] = "user01";
        users[1][2] = "123";
        users[1][3] = "普通用户";
        users[2][0] = "软件部";
        users[2][1] = "user02";
        users[2][2] = "123";
        users[2][3] = "普通用户";
        users[3][0] = "硬件部";
        users[3][1] = "user02";
        users[3][2] = "123";
        users[3][3] = "普通用户";
        books[0][0] = "97871010";
        books[0][1] = "史记";
        books[0][2] = "125.0";
        books[0][3] = "中华书局";
        books[0][4] = "司马迁";
        books[1][0] = "97875063";
        books[1][1] = "活着";
        books[1][2] = "20.0";
        books[1][3] = "作家出版社";
        books[1][4] = "余华";
        books[2][0] = "97872290";
        books[2][1] = "三体全集";
        books[2][2] = "168.0";
        books[2][3] = "重庆出版社";
        books[2][4] = "刘慈欣";
        books[3][0] = "97875442";
        books[3][1] = "白夜行";
        books[3][2] = "39.5";
        books[3][3] = "南海出版公司";
        books[3][4] = "[日]东野圭吾";
        pubs[0][0] = "中华书局";
        pubs[0][1] = "北京市王府井大街36号";
        pubs[0][2] = "张三";
        pubs[1][0] = "作家出版社";
        pubs[1][1] = "香港九龙荷李活商业中心8楼";
        pubs[1][2] = "李四";
        pubs[2][0] = "重庆出版社";
        pubs[2][1] = "茶园新区开拓路6号";
        pubs[2][2] = "王五";
        pubs[3][0] = "南海出版公司";
        pubs[3][1] = "海秀中路51-1号星华大厦5楼";
        pubs[3][2] = "周毅";
    }

    static {
        sc = new Scanner(System.in);
        users = new String[20][4];
        books = new String[20][5];
        pubs = new String[20][3];
        loginUser = "";
    }
}
